home *** CD-ROM | disk | FTP | other *** search
- /*******************************************************************************
- VGLPAL.C
-
- These routines are used to manipulate a palette. Routines to fade in and out
- and cycle palette entries are included.
-
- Mark Morley
- morley@camosun.bc.ca
- *******************************************************************************/
-
- #include "vgl.h"
-
- static char far Pal[768];
-
- /*******************************************************************************
- Sets the active palette to all black. Useful for drawing a screen and then
- fading in later.
- *******************************************************************************/
- vglBlack()
- {
- memset( Pal, 0, 768 );
- vglSetPal( Pal );
- return;
- }
-
- /*******************************************************************************
- Fades in from black to the specified palette.
- *******************************************************************************/
- vglFadeIn( char far* palette )
- {
- int i, j, v;
-
- for( i = 0; i < 32; i++ )
- {
- for( j = 0; j < 768; j++ )
- Pal[j] = (i * (unsigned)palette[j]) >> 5;
- vglSetPal( Pal );
- }
- return;
- }
-
- /*******************************************************************************
- Fades to black from a specified palette.
- *******************************************************************************/
- vglFadeOut( char far* palette )
- {
- int i, j, v;
-
- for( i = 31; i >= 0; i-- )
- {
- for( j = 0; j < 768; j++ )
- Pal[j] = (i * (unsigned)palette[j]) >> 5;
- vglSetPal( Pal );
- }
- return;
- }
-
- /*******************************************************************************
- Fades in only a part of the palette.
- *******************************************************************************/
- vglPartFadeIn( int first, int num, char far* palette )
- {
- int i, j, v;
-
- for( i = 0; i < 32; i++ )
- {
- for( j = 0; j < num * 3; j++ )
- Pal[j] = (i * (unsigned)palette[j]) >> 5;
- vglSetPartPal( first, num, Pal );
- }
- return;
- }
-
- /*******************************************************************************
- Fades out only a part of the palette.
- *******************************************************************************/
- vglPartFadeOut( int first, int num, char far* palette )
- {
- int i, j, v;
-
- for( i = 31; i >= 0; i-- )
- {
- for( j = 0; j < num * 3; j++ )
- Pal[j] = (i * (unsigned)palette[j]) >> 5;
- vglSetPartPal( first, num, Pal );
- }
- return;
- }
-
- /*******************************************************************************
- Cycles 'num' palette entries, starting at the 'first' entry. Entries are
- cycled to the "left".
- *******************************************************************************/
- vglPartCycleL( int first, int num, char far* palette )
- {
- int i, a, b, c;
-
- num--;
- a = palette[0];
- b = palette[1];
- c = palette[2];
- for( i = 0; i < num * 3; i++ )
- palette[i] = palette[i + 3];
- palette[i] = a;
- palette[i + 1] = b;
- palette[i + 2] = c;
- vglSetPartPal( first, num + 1, palette );
- return;
- }
-
- /*******************************************************************************
- Cycles 'num' palette entries, starting at the 'first' entry. Entries are
- cycled to the "right".
- *******************************************************************************/
- vglPartCycleR( int first, int num, char far* palette )
- {
- int i, a, b, c;
-
- i = (num * 3) - 1;
- a = palette[i - 2];
- b = palette[i - 1];
- c = palette[i];
- for( ; i >= 3; i-- )
- palette[i] = palette[i - 3];
- palette[0] = a;
- palette[1] = b;
- palette[2] = c;
- vglSetPartPal( first, num, palette );
- return;
- }